<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of teste
 *
 * @author Lucas Pinheiro
 */
class Pessoa extends Admin {

    public function __construct() {
        parent::__construct();
        $this->parser->set_js( 'js/pessoas.js' );
        $this->load->language( 'pessoas/pessoa_layout' );
        $this->parser->set_title_pagina( 'pessoa', 'adm/pessoas' );
        $this->parser->set_title( 'Pessoa' );
        $this->load->model( 'pessoas/pessoas_contatos_model' );
        $this->load->model( 'pessoas/pessoas_contatos_tipos_model' );
        $this->load->model( 'pessoas/pessoas_enderecos_model' );
        $this->load->model( 'pessoas/pessoas_fisicas_model' );
        $this->load->model( 'pessoas/pessoas_juridicas_model' );
        $this->load->model( 'pessoas/pessoas_model' );
        $this->load->helper( 'pessoas/combos' );
        $this->load->helper( 'text' );
    }

    public function index() {
        $this->parser->site_view( 'pessoas/dashboard', array( ) );
    }

    public function consultar() {
        $params = array( );
        $params['CAMPOS'] = 'p.*, u.id_user, pc.descricao';
        $params['JOIN'][] = array(
            'TABELA' => $this->config->item( 'tblUser' ) . ' as u',
            'TIPO' => 'LEFT',
            'AND' => 'p.id_pessoas = u.id_pessoas',
        );
        $params['JOIN'][] = array(
            'TABELA' => $this->config->item( 'tblPessoasContatos' ) . ' as pc',
            'TIPO' => 'LEFT',
            'AND' => 'p.id_pessoas = pc.id_pessoas AND pc.id_pessoas_contatos_tipos in (1, 2, 3)',
        );
        $b_consultar = $this->pessoas_model->consultar( $params );

        $v_dados = array( );
        $v_dados['pessoas'] = array( );
        $v_dados['lang_title_consulta'] = $this->lang->line( 'lang_title_consulta' );

        if( $b_consultar != NULL ) {
            foreach( $b_consultar as $k => $v ) {
                $v_dados['pessoas'][$v->id_pessoas]['id_pessoas'] = $v->id_pessoas;
                $v_dados['pessoas'][$v->id_pessoas]['nome'] = $v->nome;
                $v_dados['pessoas'][$v->id_pessoas]['tipo'] = $v->tipo;
                $v_dados['pessoas'][$v->id_pessoas]['id_user'] = ($v->id_user != NULL ? 'Sim' : 'Não');
                if( !isset( $v_dados['pessoas'][$v->id_pessoas]['descricao'] ) ) {
                    $v_dados['pessoas'][$v->id_pessoas]['descricao'] = formataString( array( 'entrada' => $v->descricao, 'formato' => 'telefone' ) );
                } else {
                    $v_dados['pessoas'][$v->id_pessoas]['descricao'] .= "<br />" . formataString( array( 'entrada' => $v->descricao, 'formato' => 'telefone' ) );
                }

                $v_dados['pessoas'][$v->id_pessoas]['acao'] = '<a href="' . base_adm( 'pessoas/pessoa/alterar/' . $v->id_pessoas ) . '" title="Editar" class="button middle"><span class="icon icon145"></span></a>';
                if( $v->id_user != NULL ) {
                    $v_dados['pessoas'][$v->id_pessoas]['acao'] .= '<a href="' . base_adm( 'usuarios/usuario/alterar/' . $v->id_user ) . '" title="Editar usuário" class="button middle"><span class="icon icon4"></span></a>';
                } else {
                    $v_dados['pessoas'][$v->id_pessoas]['acao'] .= '<a href="' . base_adm( 'usuarios/usuario/cadastrar/' . $v->id_pessoas ) . '" title="Criar usuário" class="button middle"><span class="icon icon4"></span></a>';
                }
                $v_dados['pessoas'][$v->id_pessoas]['acao'] .= '<a href="' . base_adm( 'pessoas/pessoa/excluir/' . $v->id_pessoas ) . '" title="Excluir" class="button middle dialog_excluir"><span class="icon icon186"></span></a>';
            }
        }
        $this->parser->site_view( 'lst_pessoa', $v_dados );
    }

    public function cadastrar() {
        $v_dados = array( );
        // Pessoa
        $v_dados['id_pessoas'] = '';
        $v_dados['nome'] = '';
        $v_dados['tipo'] = combo_tipo();
        // Pessoa fisica
        $v_dados['data_nascimento'] = '';
        $v_dados['cpf'] = '';
        $v_dados['rg'] = '';
        $v_dados['rg_orgao'] = '';
        $v_dados['rg_emissao'] = '';
        // Pessoa juridica
        $v_dados['razao_social'] = '';
        $v_dados['cnpj'] = '';
        $v_dados['inscricao_estatual'] = '';
        $v_dados['inscricao_municipal'] = '';
        $v_dados['data_constituicao'] = '';
        // Pessoa endereco
        $v_dados['logradouro'] = '';
        $v_dados['numero'] = '';
        $v_dados['complemento'] = '';
        $v_dados['bairro'] = '';
        $v_dados['cidade'] = '';
        $v_dados['estado'] = '';
        $v_dados['pais'] = '';
        $v_dados['cep'] = '';
        // Pessoas contato 
        $v_dados['contatos'][0]['descricao'] = '';
        $v_dados['contatos'][0]['id_pessoas_contatos_tipos'] = combo_pessoas_contatos_tipos();

        $v_dados['lang_title_form'] = $this->lang->line( 'lang_title_form_insert' );
        $v_dados['action'] = base_adm( 'pessoas/pessoa/gravar' );

        $this->parser->site_view( 'frm_pessoa', $v_dados );
    }

    public function excluir() {
        $params = array( );
        $params['AND']['id_publicidade'] = $this->uri->segment( 5 );
        $b_exclusao = $this->pessoas_model->excluir( $params );

        $v_dados = array( );

        if( $b_exclusao == TRUE ) {
            $v_dados['cod'] = 999;
            $v_dados['msg'] = $this->lang->line( 'lang_delete_success' );
        } else {
            $v_dados['cod'] = 111;
            $v_dados['msg'] = $this->lang->line( 'lang_delete_error' );
        }

        echo json_encode( $v_dados );
    }

    public function alterar( $id_pessoas ) {
        $params = array( );
        $params['AND']['id_pessoas'] = $id_pessoas;

        $b_consultar = $this->pessoas_model->get( $params );

        $v_dados = array( );
        // Pessoa
        $v_dados['id_pessoas'] = $b_consultar->id_pessoas;
        $v_dados['nome'] = $b_consultar->nome;
        $v_dados['tipo'] = combo_tipo( $b_consultar->tipo );
        // Pessoa fisica
        $v_dados['data_nascimento'] = '';
        $v_dados['cpf'] = '';
        $v_dados['rg'] = '';
        $v_dados['rg_orgao'] = '';
        $v_dados['rg_emissao'] = '';
        $b_consultar = $this->pessoas_fisicas_model->get( $params );
        if( $b_consultar != NULL ) {
            $v_dados['data_nascimento'] = ($b_consultar->data_nascimento != NULL ? formatarData( $b_consultar->data_nascimento, array( 'formato' => 'd/m/Y' ) ) : '');
            $v_dados['cpf'] = formataString( array( 'entrada' => $b_consultar->cpf, 'formato' => 'cpf' ) );
            $v_dados['rg'] = $b_consultar->rg;
            $v_dados['rg_orgao'] = $b_consultar->rg_orgao;
            $v_dados['rg_emissao'] = ($b_consultar->rg_emissao != NULL ? formatarData( $b_consultar->rg_emissao, array( 'formato' => 'd/m/Y' ) ) : '');
        }
        // Pessoa juridica
        $v_dados['razao_social'] = '';
        $v_dados['cnpj'] = '';
        $v_dados['inscricao_estatual'] = '';
        $v_dados['inscricao_municipal'] = '';
        $v_dados['data_constituicao'] = '';
        $b_consultar = $this->pessoas_juridicas_model->get( $params );
        if( $b_consultar != NULL ) {
            $v_dados['razao_social'] = $b_consultar->razao_social;
            $v_dados['cnpj'] = formataString( array( 'entrada' => $b_consultar->cnpj, 'formato' => 'cnpj' ) );
            $v_dados['inscricao_estatual'] = $b_consultar->inscricao_estatual;
            $v_dados['inscricao_municipal'] = $b_consultar->inscricao_municipal;
            $v_dados['data_constituicao'] = ($b_consultar->data_constituicao != NULL ? formatarData( $b_consultar->data_constituicao, array( 'formato' => 'd/m/Y' ) ) : '');
        }
        // Pessoa endereco
        $v_dados['logradouro'] = '';
        $v_dados['numero'] = '';
        $v_dados['complemento'] = '';
        $v_dados['bairro'] = '';
        $v_dados['cidade'] = '';
        $v_dados['estado'] = '';
        $v_dados['pais'] = '';
        $v_dados['cep'] = '';
        $b_consultar = $this->pessoas_enderecos_model->get( $params );
        if( $b_consultar != NULL ) {
            $v_dados['logradouro'] = $b_consultar->logradouro;
            $v_dados['numero'] = $b_consultar->numero;
            $v_dados['complemento'] = $b_consultar->complemento;
            $v_dados['bairro'] = $b_consultar->bairro;
            $v_dados['cidade'] = $b_consultar->cidade;
            $v_dados['estado'] = $b_consultar->estado;
            $v_dados['pais'] = $b_consultar->pais;
            $v_dados['cep'] = formataString( array( 'entrada' => $b_consultar->cep, 'formato' => 'cep' ) );
        }
        // Pessoas contato 
        $v_dados['contatos'][0]['descricao'] = '';
        $v_dados['contatos'][0]['id_pessoas_contatos_tipos'] = combo_pessoas_contatos_tipos();
        $b_consultar = $this->pessoas_contatos_model->consultar( $params );
        //pre($b_consultar);
        //exit;
        if( $b_consultar != NULL ) {
            foreach( $b_consultar as $key => $value ) {
                if( $value->id_pessoas_contatos_tipos != 4 ) {
                    $v_dados['contatos'][$key]['descricao'] = formataString( array( 'entrada' => $value->descricao, 'formato' => 'telefone' ) );
                } else {
                    $v_dados['contatos'][$key]['descricao'] = $value->descricao;
                }
                $v_dados['contatos'][$key]['id_pessoas_contatos_tipos'] = combo_pessoas_contatos_tipos( $value->id_pessoas_contatos_tipos );
            }
        }

        $v_dados['lang_title_form'] = $this->lang->line( 'lang_title_form_update' );
        $v_dados['action'] = base_adm( 'pessoas/pessoa/gravar' );

        $this->parser->site_view( 'frm_pessoa', $v_dados );
    }

    public function gravar() {
        $this->form_validation->set_rules( 'nome', 'Nome', 'trim|required' );
        $this->form_validation->set_rules( 'tipo', 'Tipo', 'trim|required' );

        $v_dados = array( );

        if( $this->form_validation->run() === FALSE ) {
            $v_dados = $this->form_validation->erros();
        } else {
            $v_dados['cod'] = 999;
            $params = array( );
            $params['SET']['nome'] = $this->input->post( 'nome' );
            $params['SET']['tipo'] = $this->input->post( 'tipo' );

            if( $this->input->post( 'id_pessoas' ) == '' ) {
                $v_dados['id'] = $this->pessoas_model->cadastrar( $params );
                $v_dados['msg'] = $this->lang->line( 'lang_insert' );
            } else {
                $params['AND']['id_pessoas'] = $this->input->post( 'id_pessoas' );
                $v_dados['id'] = $this->input->post( 'id_pessoas' );
                $v_dados['msg'] = $this->lang->line( 'lang_update' );
                $this->pessoas_model->alterar( $params );
            }
            $this->cadastrar_contatos( $v_dados['id'] );
            $this->cadastrar_endereco( $v_dados['id'] );
            if( $this->input->post( 'tipo' ) == 1 ) {
                $this->cadastrar_fisica( $v_dados['id'] );
            } else if( $this->input->post( 'tipo' ) == 2 ) {
                $this->cadastrar_juridica( $v_dados['id'] );
            }
        }
        echo json_encode( $v_dados );
    }

    private function cadastrar_endereco( $id_pessoas ) {
        $params2 = array( );
        $params2['AND']['id_pessoas'] = $id_pessoas;

        $params = array( );
        $params['SET']['cep'] = limpaString( array( 'entrada' => $this->input->post( 'cep' ) ) );
        $params['SET']['logradouro'] = trim( $this->input->post( 'logradouro' ) );
        $params['SET']['numero'] = trim( $this->input->post( 'numero' ) );
        $params['SET']['complemento'] = trim( $this->input->post( 'complemento' ) );
        $params['SET']['bairro'] = trim( $this->input->post( 'bairro' ) );
        $params['SET']['cidade'] = trim( $this->input->post( 'cidade' ) );
        $params['SET']['estado'] = trim( $this->input->post( 'estado' ) );
        $params['SET']['pais'] = trim( $this->input->post( 'pais' ) );

        if( $this->pessoas_enderecos_model->get( $params2 ) != NULL ) {
            $params['AND']['id_pessoas'] = $id_pessoas;
            $this->pessoas_enderecos_model->alterar( $params );
        } else {
            $params['SET']['id_pessoas'] = $id_pessoas;
            $this->pessoas_enderecos_model->cadastrar( $params );
        }
    }

    private function cadastrar_fisica( $id_pessoas ) {
        $params2 = array( );
        $params2['AND']['id_pessoas'] = $id_pessoas;

        $params = array( );
        $params['SET']['data_nascimento'] = formatarData( $this->input->post( 'data_nascimento' ), array( 'formato' => 'Y-m-d' ) );
        $params['SET']['cpf'] = limpaString( array( 'entrada' => $this->input->post( 'cpf' ) ) );
        $params['SET']['rg'] = trim( $this->input->post( 'rg' ) );
        $params['SET']['rg_orgao'] = trim( $this->input->post( 'rg_orgao' ) );
        $params['SET']['rg_emissao'] = formatarData( $this->input->post( 'rg_emissao' ), array( 'formato' => 'Y-m-d' ) );

        if( $this->pessoas_fisicas_model->get( $params2 ) != NULL ) {
            $params['AND']['id_pessoas'] = $id_pessoas;
            $this->pessoas_fisicas_model->alterar( $params );
        } else {
            $params['SET']['id_pessoas'] = $id_pessoas;
            $this->pessoas_fisicas_model->cadastrar( $params );
        }
    }

    private function cadastrar_juridica( $id_pessoas ) {
        $params2 = array( );
        $params2['AND']['id_pessoas'] = $id_pessoas;

        $params = array( );
        $params['SET']['razao_social'] = $this->input->post( 'razao_social' );
        $params['SET']['cnpj'] = limpaString( array( 'entrada' => $this->input->post( 'cnpj' ) ) );
        $params['SET']['inscricao_estatual'] = trim( $this->input->post( 'inscricao_estatual' ) );
        $params['SET']['inscricao_municipal'] = trim( $this->input->post( 'inscricao_municipal' ) );
        $params['SET']['data_constituicao'] = formatarData( $this->input->post( 'data_constituicao' ), array( 'formato' => 'Y-m-d' ) );

        if( $this->pessoas_juridicas_model->get( $params2 ) != NULL ) {
            $params['AND']['id_pessoas'] = $id_pessoas;
            $this->pessoas_juridicas_model->alterar( $params );
        } else {
            $params['SET']['id_pessoas'] = $id_pessoas;
            $this->pessoas_juridicas_model->cadastrar( $params );
        }
    }

    private function cadastrar_contatos( $id_pessoas ) {
        $params = array( );
        $params['AND']['id_pessoas'] = $id_pessoas;
        $this->pessoas_contatos_model->excluir( $params );

        $id_pessoas_contatos_tipos = $this->input->post( 'id_pessoas_contatos_tipos' );
        foreach( $this->input->post( 'descricao' ) as $key => $value ) {
            if( limpaString( array( 'entrada' => $value ) ) != '' ) {
                $params = array( );
                $params['SET']['descricao'] = limpaString( array( 'entrada' => $value ) );
                $params['SET']['id_pessoas_contatos_tipos'] = $id_pessoas_contatos_tipos[$key];
                $params['SET']['id_pessoas'] = $id_pessoas;
                $this->pessoas_contatos_model->cadastrar( $params );
            }
        }
    }

    public function busca_cep( $cep ) {
        $retorno = simplexml_load_string( file_get_contents( 'http://cep.republicavirtual.com.br/web_cep.php?cep=' . str_replace( '-', '', $cep ) . '&formato=xml' ) );
        echo json_encode( $retorno );
    }

}
